<!DOCTYPE html>
<html lang="cn">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title> 记录 </title>

    <!-- Bootstrap -->
    <link href="/static/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="/static/css/font-awesome.min.css">
    <link rel="stylesheet" href="/static/css/jquery.bxslider.css">
    <link rel="stylesheet" type="text/css" href="/static/css/isotope.css" media="screen"/>
    <link rel="stylesheet" href="/static/css/animate.css">
    <link rel="stylesheet" href="/static/js/fancybox/jquery.fancybox.css" type="text/css" media="screen"/>
    <link href="/static/css/style.css" rel="stylesheet">
</head>
<body>
<!-- 导航栏-->
<header>
    <nav div class="navbar navbar-default navbar-static-top" role="navigation">
        <div class="container">
            <ul class="social-network">
                <li><a href="https://github.com/linuxMengfan" data-placement="top" title="github" target=_blank><i
                        class="fa fa-github-square fa-1x"></i></a></li>
                <li><a href="http://weibo.com/3214310262/profile?topnav=1&wvr=6" data-placement="top" title="weibo"
                       target=_blank><i class="fa fa-weibo fa-1x"></i></a></li>
                <li><a href="http://wpa.qq.com/msgrd?v=3&uin=289906303&site=qq&menu=yes" data-placement="top" title="qq"
                       target=_blank><i class="fa fa-qq fa-1x"></i></a></li>
            </ul>
            <ul class="info">
                <!-- <li><p><i class="fa fa-phone"></i>+1 769 525 422 5663</p></li> -->
                <li><a href="#"><i class="fa fa-envelope"></i>fuyun_hehe@126.com</a></li>


                　
        </div>
    </nav>

    <nav class="navbar navbar-default navbar-static-top" role="navigation">
        <div class="navigation">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                            data-target=".navbar-collapse.collapse">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <div class="navbar-brand">
                        <a href="index.html"><h1><span>M</span>eng<span>F</span>an</h1></a>
                    </div>
                </div>

                <div class="navbar-collapse collapse">
                    <div class="menu">
                        <ul class="nav nav-tabs" role="tablist">
                            <li role="presentation"><a class="" href="/index/">首页</a></li>
                            <!-- <li role="presentation"><a href="active.html">服务</a></li> -->
                            <li role="presentation"><a class="" href="/blogs/"> 博客</a></li>
                            <li role="presentation"><a class="" href="/photo/">照片</a></li>
                            <li role="presentation"><a class="" href="/email/">关于作者</a></li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </nav>
</header>

<div class="jumbotron">
    <h2>blog</h2>
</div>

<div class="blog">
    <div class="container">
        <div class="row">
            <div class="col-xs-12 col-sm-6 col-md-8">
                <div class="page-header">

                    <h3>The one djiango blog</h3>
                    <h5>Mengfan,2014年12月25日 09:58</h5>
                    <img src="/static/img/slider/6.jpg" class="img-responsive" alt=""/>

                    <h2>Deepin_Cgroups</h2>

                    <p>本文主要讲述如何在deepin系统下来配置cgroups。用来实现限制用户CPU、内存的硬件资源调用。</p>

                    <h2>基本配置</h2>

                    <p>在系统启动过程中，在<code>/sys/fs/cgroup</code>目录下有相应的文件目录用来存放限制规。主要关注以下几个：</p>

                    <p>blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等)</p>

                    <p>cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。</p>

                    <p>cpuacct -- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告</p>

                    <p>cpuset -- 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。</p>

                    <p>devices -- 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。</p>

                    <p>freezer -- 这个子系统挂起或者恢复 cgroup 中的任务。</p>

                    <p>memory -- 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的
                        内存资源报告。</p>

                    <p>可以使用命令：</p>

                    <pre><code>lssubsys -am　查看系统已经存在的子系统
</code></pre>

                    <h2>实例——限制用户CPU的使用</h2>

                    <p>下面通过一个实例来学习如何限制一个进程的CPU使用率：</p>

                    <pre><code>1.运行一个高CPU使用的命令： echo 'while True: pass' | python &amp;
2.进入限制子系统： cd /sys/fs/cgroup/cpu
3.创建一个新的限制规则组：mkdir -p /sys/fs/cgroup/cpu/text
4.系统会自动在组目录创建出详细规则文件，我们只需直接输入即可：
    echo　50000 &gt; ./text/cpu.cfs_quta_us cpu使用率不超过５０％
    echo  PID &gt; ./text/tasks
</code></pre>

                    <p>上述例子讲述了如何控制根据进程PID来限制这个进程最多只能使用50%cpu资源的例子。
                        子系统还有很多例子如：</p>

                    <h5>blkio - BLOCK IO限额</h5>

                    <pre><code>blkio.reset_stats - 重置统计信息，写int到此文件
blkio.time - 统计cgroup对设备的访问时间
blkio.sectors - 统计cgroup对设备扇区访问数量
blkio.avg_queue_size - 统计平均IO队列大小(需要CONFIG_DEBUG_BLK_CGROUP=y)
blkio.group_wait_time - 统计cgroup等待总时间(需要CONFIG_DEBUG_BLK_CGROUP=y, 单位ns)
blkio.empty_time - 统计cgroup无等待io总时间(需要CONFIG_DEBUG_BLK_CGROUP=y, 单位ns)
blkio.dequeue - 此cgroup IO操作被设备dequeue次数(需要CONFIG_DEBUG_BLK_CGROUP=y)
blkio.io_blogd - 报告CFQ scheduler统计的此cgroup对特定设备的IO操作(read, write, sync, or async)次数
blkio.io_blog_bytes - 报告CFQ scheduler统计的此cgroup对特定设备的IO操作(read, write, sync, or async)数据量
blkio.io_blog_time - 报告CFQ scheduler统计的此cgroup对特定设备的IO操作(read, write, sync, or async)时间(单位ns)
blkio.io_wait_time - 此cgroup对特定设备的特定操作(read, write, sync, or async)的等待时间(单位ns)
blkio.io_queued - 此cgroup的queued IO 操作(read, write, sync, or async)的请求次数
Proportional weight division 策略 - 按比例分配block io资源
blkio.weight - 100-1000的相对权重，会被blkio.weight_device的特定设备权重覆盖
blkio.weight_device - 特定设备的权重
</code></pre>

                    <p>#####cpu - CPU使用时间限额</p>

                    <pre><code>cpu.cfs_period_us, cpu.cfs_quota_us - 必选 - 二者配合，前者规定时间周期(微秒)后者规定cgroup最多可使用时间(微秒)，实现task对单个cpu的使用上限(cfs_quota_us是cfs_period_us的两倍即可限定在双核上完全使用)。
cpu.stat - 记录cpu统计信息，包含 nr_periods（经历了几个cfs_period_us）, nr_throttled (cgroup里的task被限制了几次), throttled_time (cgroup里的task被限制了多少纳秒)
cpu.shares - 可选 - cpu轮转权重的相对值
RT(Real-Time scheduler)策略 - CPU最小资源限制
cpu.rt_period_us, cpu.rt_runtime_us 二者配合使用规定cgroup里的task每cpu.rt_period_us(微秒)必然会执行cpu.rt_runtime_us(微秒)
</code></pre>

                    <h5>cpuacct - CPU资源报告</h5>

                    <pre><code>cpuacct.usage - cgroup中所有task的cpu使用时长(纳秒)
cpuacct.stat - cgroup中所有task的用户态和内核态分别使用cpu的时长
cpuacct.usage_percpu - cgroup中所有task使用每个cpu的时长
</code></pre>

                    <h5>cpuset - CPU绑定</h5>

                    <pre><code>cpuset.cpus - 必选 - cgroup可使用的cpu，如0-2,16代表 0,1,2,16这4个cpu
cpuset.mems - 必选 - cgroup可使用的memory node
cpuset.memory_migrate - 可选 - 当cpuset.mems变化时page上的数据是否迁移, default 0
cpuset.cpu_exclusive - 可选 - 是否独占cpu， default 0
cpuset.mem_exclusive - 可选 - 是否独占memory，default 0
cpuset.mem_hardwall - 可选 - cgroup中task的内存是否隔离， default 0
cpuset.memory_pressure - 可选  程序运行过程中使用内存和CPU的平均值
cpuset.memory_pressure_enabled - 可选 - cpuset.memory_pressure开关，default 0
cpuset.memory_spread_page - 可选 - （0或1）指定文件系统在运行的过程中均匀的使用CPU。默认（0）
cpuset.memory_spread_slab - 可选 -（0或1）指定内核Slab缓存文件输入/输出操作均匀使用CPU。默认（0）
cpuset.sched_load_balance - 可选 - cgroup的cpu压力是否会被平均到cpu set中的多个cpu, default 1
cpuset.sched_relax_domain_level - 可选 - cpuset.sched_load_balance的策略
</code></pre>

                    <h5>device - cgoup的device限制</h5>

                    <pre><code>设备黑/白名单
devices.allow - 允许名单
devices.deny - 禁止名单
devices.list - 报告
</code></pre>

                    <h5>freezer - 暂停/恢复 cgroup的限制</h5>

                    <pre><code>不能出现在root目录下
freezer.state - FROZEN 停止 FREEZING 正在停止 THAWED 恢复
</code></pre>

                    <h5>memory - 内存限制</h5>

                    <pre><code>memory.usage_in_bytes - 报告内存限制byte
memory.memsw.usage_in_bytes - 报告cgroup中进程当前所用内存+swap空间
memory.max_usage_in_bytes - 报告cgoup中的最大内存使用
memory.memsw.max_usage_in_bytes - 报告最大使用到的内存+swap
memory.limit_in_bytes - cgroup - 最大内存限制，单位k,m,g. -1代表取消限制
memory.memsw.limit_in_bytes - 最大内存+swap限制，单位k,m,g. -1代表取消限制
memory.failcnt - 报告达到最大允许内存的次数
memory.memsw.failcnt - 报告达到最大允许内存+swap的次数
memory.force_empty - 设为0且无task时，清除cgroup的内存页
memory.swappiness - 换页策略，60基准，小于60降低换出机率，大于60增加换出机率
memory.use_hierarchy - 是否影响子group
memory.oom_control - 0 enabled，当oom发生时kill掉进程
memory.stat - 报告cgroup限制状态
</code></pre>

                    <h2>开机自动限制一个用户所有进程CPU使用：</h2>

                    <p>开机主要使用
                        <code>/etc/cgrules.conf</code> 与<code>/etc/cgconfig.conf</code> 来达到开机自动限制的目的：</p>

                    <p>实例—限制用户deepin的CPU使用为50%：</p>

                    <p><code>cgrules.conf</code>的配置为：
                        <code>
                            mengfan cpu deepin/
                        </code></p>

                    <p><code>cgconfig.conf</code>的配置为：
                        ```
                        group deepin {
                        cpu {
                        cpu.rt<em>period</em>us="1000000";
                        cpu.rt<em>runtime</em>us="0";
                        cpu.cfs<em>period</em>us="100000";
                        cpu.cfs<em>quota</em>us="50000";
                        cpu.shares="1024";
                        }
                        }</p>

                    <p><code>
                        设置开机启动：
                    </code>
                        echo 'cgconfigparser /etc/cgconfig.conf' &gt;&gt; /etc/rc.local
                        echo 'cgrulesengd /etc/cgrules.conft' &gt;&gt; /etc/rc.local
                        ```</p>


                </div>


                <!--评论框 -->
                <div class="container">
                    <div class="">
                        <div class="">

                            <form role="form" method="post" action="/test">
                                {{ co }}

                                <button type="OK" class="btn btn-default">发送给作者</button>
                            </form>
                        </div>
                        <ul>
                            <li>
                                <div class="">
                                    <p>
                                        评论：<br>


                                        ceshi


                                    </p>
                                    <p></p>

                                </div>
                            </li>
                        </ul>
                    </div>
                </div>

                <nav>
                    <ul class="pager">
                        <li class="previous"><a href="#"><span aria-hidden="true">&larr;</span> Older</a></li>
                        <li class="next"><a href="#">Newer <span aria-hidden="true">&rarr;</span></a></li>
                    </ul>
                </nav>

            </div>

            <div class="recents">
                <div class="col-xs-6 col-md-4">
                    <h5>Search for.</h5>
                    <form class="form-search">
                        <input class="form-control" type="text" placeholder="Search..">
                    </form>

                </div>
                <ul class="list-group">
                    <div class="page-header">
                        <h4>分类</h4>
                    </div>


                </ul>
            </div>
        </div>
    </div>
</div>
</div>


<!-- 底栏　-->
<footer>
    <div class="last-div">
        <div class="container">
            <div class="row">
                <div class="copyright">
                    © 2014 Mengfan | Bootstraptaste | Django
                </div>
                <div class="copyleft"><a href="/index/"> 返回首页</a></div>
            </div>
        </div>
        <a href="" class="scrollup"><i class="fa fa-chevron-up"></i></a>
    </div>
</footer>


<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="/static/js/jquery-2.1.1.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/jquery.isotope.min.js"></script>
<script src="/static/js/wow.min.js"></script>
<script src="/static/js/fancybox/jquery.fancybox.pack.js"></script>
<script src="/static/js/jquery.easing.1.3.js"></script>
<script src="/static/js/jquery.bxslider.min.js"></script>
<script src="/static/js/functions.js"></script>

<script>
    wow = new WOW(
        {})
        .init();
</script>

</body>
</html>

